#ifndef __NUnit_Assert_H__
#define __NUnit_Assert_H__

//#include "..\..\ThunkC\ThunkC_\System.h"
#include "Constraints\Constraint.h"
#include "SyntaxHelpers\Is.h"
namespace System { Assert {

class Assert
{
public:
	static void dAreEqual(decimal expected, decimal actual);
	static void iAreEqual(int_ expected, int_ actual);
	static void lAreEqual(long_ expected, long_ actual);
	static void oAreEqual(object expected, object actual);
	static void uiAreEqual(uint expected, uint actual);
	static void ulAreEqual(ulong expected, ulong actual);
	static void dAreEqual2(decimal expected, decimal actual, string message);
	static void rAreEqual(double expected, double actual, double delta);
	static void iAreEqual2(int_ expected, int_ actual, string message);
	static void lAreEqual2(long_ expected, long_ actual, string message);
	static void oAreEqual2(object expected, object actual, string message);
	static void fAreEqual(float expected, float actual, float delta);
	static void uiAreEqual2(uint expected, uint actual, string message);
	static void ulAreEqual2(ulong expected, ulong actual, string message);
	static void dAreEqual3(decimal expected, decimal actual, string message, params object args[]);
	static void rAreEqual2(double expected, double actual, double delta, string message);
	static void iAreEqual3(int_ expected, int_ actual, string message, params object args[]);
	static void lAreEqual3(long_ expected, long_ actual, string message, params object args[]);
	static void oAreEqual3(object expected, object actual, string message, params object args[]);
	static void fAreEqual)(float expected, float actual, float delta, string message);
	static void uiAreEqual3(uint expected, uint actual, string message, params object args[]);
	static void ulAreEqual3(ulong expected, ulong actual, string message, params object args[]);
	static void rAreEqual3(double expected, double actual, double delta, string message, params object args[]);
	static void fAreEqual3(float expected, float actual, float delta, string message, params object args[]);

	static void dAreNotEqual(decimal expected, decimal actual);
	static void rAreNotEqual(double expected, double actual);
	static void iAreNotEqual(int_ expected, int_ actual);
	static void lAreNotEqual(long_ expected, long_ actual);
	static void oAreNotEqual(object expected, object actual);
	static void fAreNotEqual(float expected, float actual);
	static void uiAreNotEqual(uint expected, uint actual);
	static void ulAreNotEqual(ulong expected, ulong actual);
	static void dAreNotEqual2(decimal expected, decimal actual, string message);
	static void rAreNotEqual2(double expected, double actual, string message);
	static void iAreNotEqual2(int_ expected, int_ actual, string message);
	static void lAreNotEqual2(long_ expected, long_ actual, string message);
	static void oAreNotEqual2(object expected, object actual, string message);
	static void fAreNotEqual2(float expected, float actual, string message);
	static void uiAreNotEqual2(uint expected, uint actual, string message);
	static void ulAreNotEqual2(ulong expected, ulong actual, string message);
	static void dAreNotEqual3(decimal expected, decimal actual, string message, params object args[]);
	static void rAreNotEqual3(double expected, double actual, string message, params object args[]);
	static void iAreNotEqual3(int_ expected, int_ actual, string message, params object args[]);
	static void lAreNotEqual3(long_ expected, long_ actual, string message, params object args[]);
	static void oAreNotEqual3(object expected, object actual, string message, params object args[]);
	static void fAreNotEqual3(float expected, float actual, string message, params object args[]);
	static void uiAreNotEqual3(uint expected, uint actual, string message, params object args[]);
	static void ulAreNotEqual3(ulong expected, ulong actual, string message, params object args[]);

	static void oAreNotSame(object expected, object actual);
	static void oAreNotSame2(object expected, object actual, string message);
	static void oAreNotSame3(object expected, object actual, string message, params object args[]);

	static void oAreSame(object expected, object actual);
	static void oAreSame2(object expected, object actual, string message);
	static void oAreSame3(object expected, object actual, string message, params object args[]);

	static void oContains(object expected, Collections_ICollection(System_Object) *actual);
	static void oContains2(object expected, Collections_ICollection(System_Object) *actual, string message);
	static void oContains3(object expected, Collections_ICollection(System_Object) *actual, string message, params object args[]);

	static bool Equals(object a, object b);

	static void Fail();
	static void Fail2(string message);
	static void Fail3(string message, params object args[]);

	static void dGreater(decimal arg1, decimal arg2);
	static void rGreater(double arg1, double arg2);
	static void xGreater(System_IComparable(System_Object) *arg1, System_IComparable(System_Object) *arg2);
	static void iGreater(int_ arg1, int_ arg2);
	static void lGreater(long_ arg1, long_ arg2);
	static void fGreater(float arg1, float arg2);
	static void uiGreater(uint arg1, uint arg2);
	static void ulGreater(ulong arg1, ulong arg2);
	static void dGreater2(decimal arg1, decimal arg2, string message);
	static void rGreater2(double arg1, double arg2, string message);
	static void xGreater2(System_IComparable(System_Object) *arg1, System_IComparable(System_Object) *arg2, string message);
	static void iGreater2(int_ arg1, int_ arg2, string message);
	static void lGreater2(long_ arg1, long_ arg2, string message);
	static void fGreater2(float arg1, float arg2, string message);
	static void uiGreater2(uint arg1, uint arg2, string message);
	static void ulGreater2(ulong arg1, ulong arg2, string message);
	static void dGreater3(decimal arg1, decimal arg2, string message, params object args[]);
	static void rGreater3(double arg1, double arg2, string message, params object args[]);
	static void xGreater3(System_IComparable(System_Object) *arg1, System_IComparable(System_Object) *arg2, string message, params object args[]);
	static void iGreater3(int_ arg1, int_ arg2, string message, params object args[]);
	static void lGreater3(long_ arg1, long_ arg2, string message, params object args[]);
	static void fGreater3(float arg1, float arg2, string message, params object args[]);
	static void uiGreater3(uint arg1, uint arg2, string message, params object args[]);
	static void ulGreater3(ulong arg1, ulong arg2, string message, params object args[]);

	static void dGreaterOrEqual(decimal arg1, decimal arg2);
	static void rGreaterOrEqual(double arg1, double arg2);
	static void xGreaterOrEqual(System_IComparable(System_Object) *arg1, System_IComparable(System_Object) *arg2);
	static void iGreaterOrEqual(int_ arg1, int_ arg2);
	static void lGreaterOrEqual(long_ arg1, long_ arg2);
	static void fGreaterOrEqual(float arg1, float arg2);
	static void uiGreaterOrEqual(uint arg1, uint arg2);
	static void ulGreaterOrEqual(ulong arg1, ulong arg2);
	static void dGreaterOrEqual2(decimal arg1, decimal arg2, string message);
	static void rGreaterOrEqual2(double arg1, double arg2, string message);
	static void xGreaterOrEqual2(System_IComparable(System_Object) *arg1, System_IComparable(System_Object) *arg2, string message);
	static void iGreaterOrEqual2(int_ arg1, int_ arg2, string message);
	static void lGreaterOrEqual2(long_ arg1, long_ arg2, string message);
	static void fGreaterOrEqual2(float arg1, float arg2, string message);
	static void uiGreaterOrEqual2(uint arg1, uint arg2, string message);
	static void ulGreaterOrEqual2(ulong arg1, ulong arg2, string message);
	static void dGreaterOrEqual3(decimal arg1, decimal arg2, string message, params object args[]);
	static void rGreaterOrEqual3(double arg1, double arg2, string message, params object args[]);
	static void xGreaterOrEqual3(System_IComparable(System_Object) *arg1, System_IComparable(System_Object) *arg2, string message, params object args[]);
	static void iGreaterOrEqual3(int_ arg1, int_ arg2, string message, params object args[]);
	static void lGreaterOrEqual3(long_ arg1, long_ arg2, string message, params object args[]);
	static void fGreaterOrEqual3(float arg1, float arg2, string message, params object args[]);
	static void uiGreaterOrEqual3(uint arg1, uint arg2, string message, params object args[]);
	static void ulGreaterOrEqual3(ulong arg1, ulong arg2, string message, params object args[]);

	static void Ignore();
	static void Ignore2(string message);
	static void Ignore3(string message, params object args[]);

	static void xIsAssignableFrom(System_Type *expected, object actual);
	static void xIsAssignableFrom2(System_Type *expected, object actual, string message);
	static void xIsAssignableFrom3(System_Type *expected, object actual, string message, params object args[]);

	static void xIsEmpty(Collections_ICollection(System_Object) *collection);
	static void sIsEmpty(string aString);
	static void xIsEmpty2(Collections_ICollection(System_Object) *collection, string message);
	static void sIsEmpty2(string aString, string message);
	static void xIsEmpty3(Collections_ICollection(System_Object) *collection, string message, params object args[]);
	static void sIsEmpty3(string aString, string message, params object args[]);

	static void bIsFalse(bool condition);
	static void bIsFalse2(bool condition, string message);
	static void bIsFalse3(bool condition, string message, params object args[]);

	static void xIsInstanceOfType(System_Type *expected, object actual);
	static void xIsInstanceOfType2(System_Type *expected, object actual, string message);
	static void xIsInstanceOfType3(System_Type *expected, object actual, string message, params object args[]);

	static void rIsNaN(double aDouble);
	static void rIsNaN2(double aDouble, string message);
	static void rIsNaN3(double aDouble, string message, params object args[]);

	static void xIsNotAssignableFrom(System_Type *expected, object actual);
	static void xIsNotAssignableFrom2(System_Type *expected, object actual, string message);
	static void xIsNotAssignableFrom3(System_Type *expected, object actual, string message, params object args[]);

	static void xIsNotEmpty(Collections_ICollection(System_Object) *collection);
	static void sIsNotEmpty(string aString);
	static void xIsNotEmpty2(Collections_ICollection(System_Object) *collection, string message);
	static void sIsNotEmpty2(string aString, string message);
	static void xIsNotEmpty3(Collections_ICollection(System_Object) *collection, string message, params object args[]);
	static void sIsNotEmpty3(string aString, string message, params object args[]);

	static void xIsNotInstanceOfType(System_Type *expected, object actual);
	static void xIsNotInstanceOfType2(System_Type *expected, object actual, string message);
	static void xIsNotInstanceOfType3(System_Type *expected, object actual, string message, params object args[]);

	static void oIsNotNull(object anObject);
	static void oIsNotNull2(object anObject, string message);
	static void oIsNotNull3(object anObject, string message, params object args[]);

	static void oIsNull(object anObject);
	static void oIsNull2(object anObject, string message);
	static void oIsNull3(object anObject, string message, params object args[]);

	static void bIsTrue(bool condition);
	static void bIsTrue2(bool condition, string message);
	static void bIsTrue3(bool condition, string message, params object args[]);

	static void dLess(decimal arg1, decimal arg2);
	static void rLess(double arg1, double arg2);
	static void xLess(System_IComparable(System_Object) *arg1, System_IComparable(System_Object) *arg2);
	static void iLess(int_ arg1, int_ arg2);
	static void lLess(long_ arg1, long_ arg2);
	static void fLess(float arg1, float arg2);
	static void uiLess(uint arg1, uint arg2);
	static void ulLess(ulong arg1, ulong arg2);
	static void dLess2(decimal arg1, decimal arg2, string message);
	static void rLess2(double arg1, double arg2, string message);
	static void xLess2(System_IComparable(System_Object) *arg1, System_IComparable(System_Object) *arg2, string message);
	static void iLess2(int_ arg1, int_ arg2, string message);
	static void lLess2(long_ arg1, long_ arg2, string message);
	static void fLess2(float arg1, float arg2, string message);
	static void uiLess2(uint arg1, uint arg2, string message);
	static void ulLess2(ulong arg1, ulong arg2, string message);
	static void dLess3(decimal arg1, decimal arg2, string message, params object args[]);
	static void rLess3(double arg1, double arg2, string message, params object args[]);
	static void xLess3(System_IComparable(System_Object) *arg1, System_IComparable(System_Object) *arg2, string message, params object args[]);
	static void iLess3(int_ arg1, int_ arg2, string message, params object args[]);
	static void lLess3(long_ arg1, long_ arg2, string message, params object args[]);
	static void fLess3(float arg1, float arg2, string message, params object args[]);
	static void uiLess3(uint arg1, uint arg2, string message, params object args[]);
	static void ulLess3(ulong arg1, ulong arg2, string message, params object args[]);

	static void dLessOrEqual(decimal arg1, decimal arg2);
	static void rLessOrEqual(double arg1, double arg2);
	static void xLessOrEqual(System_IComparable(System_Object) *arg1, System_IComparable(System_Object) *arg2);
	static void iLessOrEqual(int_ arg1, int_ arg2);
	static void lLessOrEqual(long_ arg1, long_ arg2);
	static void fLessOrEqual(float arg1, float arg2);
	static void uiLessOrEqual(uint arg1, uint arg2);
	static void ulLessOrEqual(ulong arg1, ulong arg2);
	static void dLessOrEqual2(decimal arg1, decimal arg2, string message);
	static void rLessOrEqual2(double arg1, double arg2, string message);
	static void xLessOrEqual2(System_IComparable(System_Object) *arg1, System_IComparable(System_Object) *arg2, string message);
	static void iLessOrEqual2(int_ arg1, int_ arg2, string message);
	static void lLessOrEqual2(long_ arg1, long_ arg2, string message);
	static void fLessOrEqual2(float arg1, float arg2, string message);
	static void uiLessOrEqual2(uint arg1, uint arg2, string message);
	static void ulLessOrEqual2(ulong arg1, ulong arg2, string message);
	static void dLessOrEqual3(decimal arg1, decimal arg2, string message, params object args[]);
	static void rLessOrEqual3(double arg1, double arg2, string message, params object args[]);
	static void xLessOrEqual3(System_IComparable(System_Object) *arg1, System_IComparable(System_Object) *arg2, string message, params object args[]);
	static void iLessOrEqual3(int_ arg1, int_ arg2, string message, params object args[]);
	static void lLessOrEqual3(long_ arg1, long_ arg2, string message, params object args[]);
	static void fLessOrEqual3(float arg1, float arg2, string message, params object args[]);
	static void uiLessOrEqual3(uint arg1, uint arg2, string message, params object args[]);
	static void ulLessOrEqual3(ulong arg1, ulong arg2, string message, params object args[]);

	static void bThat(bool condition);
	static void bThat2(bool condition, string message);
	static void oThat(object actual, NUnit_Constraints_Constraint *constraint);
	static void bThat3(bool condition, string message, params object args[]);
	static void oThat2(object actual, NUnit_Constraints_Constraint *constraint, string message);
	static void oThat3(object actual, NUnit_Constraints_Constraint *constraint, string message, params object args[]);
};

}}
#endif /* __NUnit_Assert_H__ */
